#include <iostream>
#include <forward_list>

template <typename T>
void Print(const T &v)
{
    for (auto ite = v.begin(); ite != v.end(); ite++)
    {
        std::cout << *ite << " ";
    }
    std::cout << std::endl;
}

int main()
{
    std::forward_list<int> l;
    l.push_front(10);
    Print(l);

    // auto ite = l.begin() + 1; // 不支持随机迭代器
    auto ite = l.before_begin(); // 说明有头节点，支持头插
    // ite--; // 单链表不支持迭代器往前走
    l.insert_after(ite, 1); // 单链表插入，指针要停在插入位置的前一个位置
    Print(l);

    // l.erase_after(); // 删除也是要停在要删除的前一个位置

    std::forward_list<int> l1;
    for(int i = 0; i < 10; i++)
    {
        l1.push_front(i + 1);
    }

    std::forward_list<int> l2;
    for(int i = 0; i < 10; i++)
    {
        l2.push_front(i + 1);
    }

    Print(l1);
    Print(l2);
    l1.merge(l2); // O(1)
    Print(l1);
    Print(l2); // 合并过去就没了

    l.reverse();

    return 0;
}